数据库的通用命令行工具 USQL

说明

USQL 是一个使用 Go 语言开发的支持 SQL/NoSQL 数据库的通用命令行工具,支持多种主流的数据库软件。

比如:PostgreSQL、MySQL、Oracle Database、SQLite3、Microsoft SQL Server 以及许多其它的数据库(包括 NoSQL 和非关系型数据库)。

USQL 的灵感来自 PostgreSQL 的 PSQL,USQL 支持大多数 PSQL 的核心特性,比如:设置变量、反引号参数。

并具有 PSQL 不支持的其它功能,如语法高亮、基于上下文的自动补全和多数据库支持等。

项目地址:https://github.com/xo/usql

下载安装

wget https://github.com/xo/usql/releases/download/v0.7.0/usql-0.7.0-linux-amd64.tar.bz2

tar -jxf usql-0.7.0-linux-amd64.tar.bz2

mv usql /usr/bin/

## 官方编译版只带有PostgreSQL, MySQL, SQLite3 and Microsoft SQL Server驱动,如果要支持其它数据库,需要自己编译

$ sudo yum install golang git

# install all drivers
$ go get -u -tags all github.com/xo/usql

# install with most drivers (same as all but excludes Oracle/ODBC)
$ go get -u -tags most github.com/xo/usql

# install with base drivers and Oracle/ODBC support
$ go get -u -tags 'oracle odbc' github.com/xo/usql

# install all drivers excluding avatica and couchbase
$ go get -u -tags 'all no_avatica no_couchbase' github.com/xo/usql

连接到一个 MySQL 数据库

# 使用默认信息连接到数据库
usql my://

# 使用用户名和密码连接到指定的数据库
usql my://user:pass@host/dbname

# 使用用户名、密码和端口连接到指定的数据库
usql mysql://user:pass@host:port/dbname

# 使用指定的套接字连接数据库
usql /var/run/mysqld/mysqld.sock

连接到一个 PostgreSQL 数据库

# 使用默认信息连接到数据库
usql pg://

# 使用用户名和密码连接到指定的数据库
usql pg://user:pass@host/dbname

# 使用用户名、密码和端口连接到指定的数据库
usql postgres://user:pass@host:port/dbname

# 使用指定的套接字连接数据库
usql /var/run/postgresql

连接到一个 Oracle 数据库

# 使用默认信息连接到数据库
usql or://

# 使用用户名和密码连接到指定的数据库
usql or://user:pass@host/sid

# 使用用户名、密码和端口连接到指定的数据库
usql oracle://user:pass@host:port/sid

连接到一个 SQL Server 数据库

# 使用默认信息连接到数据库
usql ms://

# 使用用户名和密码连接到指定的数据库
usql ms://user:pass@host/dbname

# 使用用户名、密码和端口连接到指定的数据库
usql mssql://user:pass@host:port/dbname

# 使用用户名和密码连接到指定实例的数据库
usql ms://user:pass@host/instancename/dbname

mysql 使用示例

## 创建一个名为 test 的数据库,并在这个数据库中建立的名为 test 的表中新增一行数据。

usql my://root:000000@localhost

my:root@localhost=> create database test;
my:root@localhost=> use test;
my:root@localhost=> CREATE TABLE IF NOT EXISTS `test`(
my:root@localhost(>    `test_id` INT,
my:root@localhost(>    `name` VARCHAR(100) NOT NULL
my:root@localhost(> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
my:root@localhost=> insert into test (test_id, name) values (1, 'hello');
my:root@localhost=> select * from test;


## 连接到一个 MySQL 数据库并运行一个名为 script.sql 的脚本
usql my://root:000000@localhost/wordpress -f script.sql


## 打印并执行缓充区中的 SQL 语句
my:root@localhost=> select *
my:root@localhost-> from test
my:root@localhost-> \p
select *
from test
my:root@localhost-> \g

## 快速切换到另一个数据库连接
ms:mike@192.168.100.210:1433/testdb=> \c my://root:000000@localhost/wordpress
my:root@localhost/wordpress=> select * from wp_postmeta limit 5;


## 使用变量进行条件查询

# 设置变量
my:root@localhost/wordpress=> \set meta 2179
# 查看当前已设置的变量
my:root@localhost/wordpress=> \set
meta = '2179'
# 使用变量做为条件进行查询
my:root@localhost/wordpress=> select * from wp_postmeta where meta_value=:'m

## 变量调用支持 :NAME、:’NAME’、和 :”NAME” 这三种方式进行调用。

## 使用反引号参数
my:root@localhost/wordpress=> \echo Welcome `echo $USER` -- 'currently:' "(" `date` ")"

## 反引号参数的执行结果也可以直接设置为一个变量的值:

my:root@localhost=> \set MYVAR `date "+%Y-%m-%d"`
my:root@localhost=> \echo :MYVAR
2018-06-19
my:root@localhost=> select id,post_author,post_date  from wp_posts where post_date < :'MYVAR'  limit 2;